package com.design.patterns.list.decorator;

/**
 * 装饰者
 * Decorator
 * @author Wangzhiwen
 */
public class Decorator extends Drink{

    // 聚合抽象组件（被装饰者）
    private Drink drink;

    // 构造器注入
    public Decorator(Drink drink) {
        this.drink = drink;
    }

    // 方法的增强
    @Override
    public String getName() {
        // 被装饰者功能方法 + 装饰者功能方法
        return drink.getName()  + " && " + super.getName() + " " + super.getPrice() ;
}
    // 饮品+调料 价格才是最终需要计算的价格。装饰者不同于被装饰者，它需要对实际方法进行增强。这里返回的应是被装饰实现的方法加上装饰者实现的方法。
    @Override
    protected float cost() {
        return super.getPrice() + drink.cost();
    }
}
